home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 2 / Atari Mega Archive CD - Volume 2.iso / minix / up1510b.tgz / up1510b / src / commands / factor.c < prev    next >
C/C++ Source or Header  |  1990-07-15  |  776b  |  48 lines

  1. /* factor - print the prime factors of a number      Author: Andy Tanenbaum */
  2.  
  3. main(argc, argv)
  4. int argc;
  5. char *argv[];
  6. {
  7. /* Factor a number */
  8.  
  9.   long i, n, flag = 0, first(), atol();
  10.  
  11.   if (argc != 2 || (n = atol(argv[1])) < 2) {
  12.     printf("Usage: factor n   (2 <= n < 2**31)\n");
  13.     exit(1);
  14.   }
  15.   if (n == 2) {
  16.     printf("2 is a prime\n");
  17.     exit(0);
  18.   }
  19.   while (1) {
  20.     i = first(n);
  21.     if (i == 0) {
  22.         if (flag == 0)
  23.             printf("%ld is a prime\n", n);
  24.         else
  25.             printf("%ld\n", n);
  26.         exit(0);
  27.     }
  28.     printf("%ld ", i);
  29.     n = n / i;
  30.     flag = 1;
  31.   }
  32. }
  33.  
  34.  
  35. long first(k)
  36. long k;
  37. {
  38. /* Return the first factor of k.  If it is a prime, return 0; */
  39.  
  40.   long i;
  41.  
  42.   if (k == 2) return(0);
  43.   if (k % 2 == 0) return (2);
  44.   for (i = 3; i <= k / 3; i += 2)
  45.     if (k % i == 0) return(i);
  46.   return(0);
  47. }
  48.